const { getDb } = require('../database');

class FileModel {
  /**
   * 获取所有文件
   * @returns {Promise<Array>} 文件列表
   */
  static async getAllFiles() {
    const db = await getDb();
    return db.all('SELECT * FROM files');
  }

  /**
   * 根据ID获取文件
   * @param {number} id - 文件ID
   * @returns {Promise<Object|null>} 文件信息
   */
  static async getFileById(id) {
    const db = await getDb();
    return db.get('SELECT * FROM files WHERE id = ?', [id]);
  }

  /**
   * 创建文件记录
   * @param {Object} fileData - 文件数据
   * @returns {Promise<number>} 新创建的文件ID
   */
  static async createFile(fileData) {
    const { filename, filepath, mimetype, size } = fileData;
    const db = await getDb();
    const result = await db.run(
      'INSERT INTO files (filename, filepath, mimetype, size) VALUES (?, ?, ?, ?)',
      [filename, filepath, mimetype, size]
    );
    return result.lastID;
  }

  /**
   * 更新文件记录
   * @param {number} id - 文件ID
   * @param {Object} fileData - 文件数据
   * @returns {Promise<boolean>} 是否更新成功
   */
  static async updateFile(id, fileData) {
    const { filename, filepath, mimetype, size } = fileData;
    const db = await getDb();
    const result = await db.run(
      'UPDATE files SET filename = ?, filepath = ?, mimetype = ?, size = ? WHERE id = ?',
      [filename, filepath, mimetype, size, id]
    );
    return result.changes > 0;
  }

  /**
   * 删除文件记录
   * @param {number} id - 文件ID
   * @returns {Promise<boolean>} 是否删除成功
   */
  static async deleteFile(id) {
    const db = await getDb();
    const result = await db.run('DELETE FROM files WHERE id = ?', [id]);
    return result.changes > 0;
  }
}

module.exports = FileModel;